package com.obelisco.modelo.dao.hibernate;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

import com.obelisco.modelo.dao.ISitioDAO;
import com.obelisco.modelo.data.Dominio;
import com.obelisco.modelo.data.Sitio;

public class SitioDAO extends HibernateDAO<Sitio> implements ISitioDAO {

	@Override
	public Sitio findByPK(Serializable clave) {
		try {
			Sitio data = (Sitio) getHibernateTemplate().get(
						"com.obelisco.modelo.data.Sitio", clave);
				return data.getEstado().equals("B") ?  null : data;        	
		} catch (RuntimeException re) {
			throw re;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Sitio> loadAll() {
		return getHibernateTemplate().find(
		"from Sitio sitio where sitio.estado != 'B'");
	}

	@Override
	public void delete(Sitio objeto) {
		// TODO Auto-generated method stub
	}

	@Override
	public void save(Sitio objeto) {
		try {
			getHibernateTemplate().saveOrUpdate(objeto);
		} catch (RuntimeException re) {
			throw re;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Sitio> findByProperty(String nombre, Object valor) {
		String queryString = "from Sitio as modelo where modelo."
				+ nombre + "= ?";
		return getHibernateTemplate().find(queryString, valor);
	}
	
	public List<Sitio> findByDominio(String nombreDominio) {
		Session session = getSession();
		Criteria criteria = session.createCriteria(Dominio.class);
		criteria.add(Expression.eq("id.nombre", nombreDominio));
		@SuppressWarnings("unchecked")
		List<Dominio> dominios = criteria.list();
		
		List<Sitio> sitios = new ArrayList<Sitio>();
		for (Dominio dominio : dominios)
			sitios.add(dominio.getId().getSitio());

		return sitios;
	}

}
